package persistence;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;

import model.*;

public abstract class APConjunto {

	public static void insertarAPConjunto(Conjunto conj) {
		// Obtener conexion BD
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia insert en tabla destino
			String senten = "INSERT INTO Ropa (idRopa, nombre,descuento, estado, tipoDeRopa, precio) VALUES (?,?,?,1,'Conjunto',?)";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, conj.getCodigo());
			ps.setString(2, conj.getNombre());
			ps.setFloat(3, conj.getDescuento());	
			ps.setFloat(4, conj.getPrecio());
			ps.execute();

			AdministradorConexiones.getInstancia().cerrarConexion(con);
		} catch (SQLException e) {
			System.out.println("Mensaje Error al Insertar APConjunto: " + e.getMessage());
			System.out.println("Stack Trace al Insertar APConjunto: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
	}

	public static Conjunto buscarAPConjunto(int conjuntoId) {
		Conjunto i = null;
		// Obtener conexion BD
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia select
			String senten = "SELECT * FROM Ropa where idRopa = ? and tipoDeRopa = 'Conjunto'";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, conjuntoId);
			ResultSet result = ps.executeQuery();
			while (result.next()) {
				i = new Conjunto(result.getInt("idRopa"), result.getString("nombre"),result.getFloat("descuento"), getPrendasDeConjunto(result.getInt("idRopa")));
			}

			AdministradorConexiones.getInstancia().cerrarConexion(con);
			return i;
		} catch (SQLException e) {
			System.out.println("Mensaje Error al Borrar APConjunto: " + e.getMessage());
			System.out.println("Stack Trace al Borrar APConjunto: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
		return null;
	}

	public static void modificarAPConjunto(Conjunto conj) {

		// Obtener conexion BD
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia insert en tabla destino
			String senten = "UPDATE Ropa set nombre = ?, descuento=? where idRopa = ? and tipoDeRopa = 'Conjunto'";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, conj.getNombre());
			ps.setFloat(2, conj.getDescuento());
			ps.setInt(3, conj.getCodigo());
			
			ps.execute();

			AdministradorConexiones.getInstancia().cerrarConexion(con);

		} catch (SQLException e) {
			System.out.println("Mensaje Error al Modificar APConjunto: " + e.getMessage());
			System.out.println("Stack Trace al Modificar APConjunto: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
	}

	public static void borrarAPConjunto(int conjuntoId) {
		// Obtener conexion BD
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia insert en tabla destino	
			String senten = "UPDATE Ropa SET estado = 0 where idRopa= ? and tipoDeRopa = 'Conjunto'";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, conjuntoId);
			ps.execute();

			AdministradorConexiones.getInstancia().cerrarConexion(con);

		} catch (SQLException e) {
			System.out.println("Mensaje Error al Borrar APConjunto: " + e.getMessage());
			System.out.println("Stack Trace al Borrar APConjunto: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
	}
	
	public static Vector<Prenda> getPrendasDeConjunto(int conjuntoId)
	{
		Vector<Prenda> prendas = new Vector<Prenda>();
		Vector<ItemMaterial> items = new Vector<ItemMaterial>();
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia select
			String senten = "select p.idRopa, p.nombre, p.estacionanio, p.precio, tipoDeRopa from Ropa p join Conjunto_Ropa cp on p.idRopa = cp.idRopaQueContiene where cp.idRopa = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1, conjuntoId);
			ResultSet result = ps.executeQuery();
			
			while (result.next()) {
				items = APPrenda.buscarMaterialesEnPrenda(result.getInt("idRopa"));
				if(result.getString("tipoDeRopa").equalsIgnoreCase("DeTemporada"))
					prendas.add(new DeTemporada(result.getString("nombre"), result.getInt("idRopa"), result.getString("estacionanio"), items,result.getFloat("precio")));
				else
					prendas.add(new SinTemporada(result.getInt("idRopa"), result.getString("nombre"), items,result.getFloat("precio")));					
			}

			AdministradorConexiones.getInstancia().cerrarConexion(con);
			return prendas;
		} catch (SQLException e) {
			System.out.println("Mensaje Error al Borrar Material: " + e.getMessage());
			System.out.println("Stack Trace al Borrar Material: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
		return null;
	}

	public static Conjunto buscarAPConjunto(String conjuntoNombre) {
		Conjunto i = null;
		// Obtener conexion BD
		Connection con = AdministradorConexiones.getInstancia().crearConexion();

		// Generar sentencia SQL
		try {
			// Preparar sentencia select
			String senten = "SELECT * FROM Ropa where  tipoDeRopa = 'Conjunto' and nombre = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setString(1, conjuntoNombre);
			ResultSet result = ps.executeQuery();
			while (result.next()) {
				i = new Conjunto(result.getInt("idRopa"), result.getString("nombre"),result.getFloat("descuento"), getPrendasDeConjunto(result.getInt("idRopa")));
			}

			AdministradorConexiones.getInstancia().cerrarConexion(con);
			return i;
		} catch (SQLException e) {
			System.out.println("Mensaje Error al Borrar APConjunto: " + e.getMessage());
			System.out.println("Stack Trace al Borrar APConjunto: " + e.getStackTrace());
			AdministradorConexiones.getInstancia().cerrarConexion(con);
		}
		return null;
	}


}

